﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Intellego.Web.ValidationEngine;
using MIAP.Entidades;
using MIAP.Negocio;
using MIAPWEB.Common;

namespace MIAPWEB.Forms
{
    public partial class AltaUsuario : PageBase
    {
        #region Variables
        /// <summary>
        /// Clase de negocio para proyectos
        /// </summary>
        private readonly AltaUsuariosNegocio altaUsuariosBussines;

        /// <summary>
        /// Clase de negocio para las operaciones comunes del sistema.
        /// </summary>
        private ComunesNegocio comunesNegocio;

        #endregion

        /// <summary>
        /// constructor de la pagina
        /// </summary>
        public AltaUsuario()
        {
            this.altaUsuariosBussines = new AltaUsuariosNegocio();
            this.comunesNegocio = new ComunesNegocio();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            this.InitValidation();

            if (!IsPostBack)
            {
                if (Request.UrlReferrer != null) this.PreviousPage = Request.UrlReferrer.ToString();
                this.LoadinitialCatalogs();
                this.AppendDefaultDropDownItem();
            }

        }

        /// <summary>
        /// Agrega al inicio del drop down el item seleccionar
        /// </summary>
        private void AppendDefaultDropDownItem()
        {
            var mensajeSeleccioanr = this.GetGlobalResourceObject("strings", "Seleccionar").ToString();
            this.comunesNegocio.SetSeleccionar(mensajeSeleccioanr, this.ddlUsuario);
        }

        /// <summary>
        /// llena los dropdowns de la pagina
        /// </summary>
        private void LoadinitialCatalogs()
        {
            this.ddlUsuario.DataSource = this.altaUsuariosBussines.GetUsuariosToEnlist().ToList();
            this.ddlUsuario.DataBind();
            this.DropDownListEstatus.DataSource = this.comunesNegocio.GetEstatus();
            this.DropDownListEstatus.DataBind();
        }

        /// <summary>
        /// Establece las validaciones de la página.
        /// </summary>
        private void InitValidation()
        {
            var errorDropDownNotEmpty = this.GetGlobalResourceObject("Strings", "ErrorDropDownRequerido").ToString();

            var ruleUsuario = new ValidationRule(this.ddlUsuario);

            ruleUsuario.NotEmpty(errorDropDownNotEmpty);

            this.ValidationEngine.Add(ruleUsuario);

        }

        /// <summary>
        /// Evento del click en el boton de guardar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnGuardar_Click(object sender, EventArgs e)
        {
            this.Save();
        }

        /// <summary>
        /// Guarda la información del usuario
        /// </summary>
        private void Save()
        {
            var lousuario = new UsuarioInfo
            {
                AliasUsuario = this.ddlUsuario.SelectedItem.Text,
                IdentificadorPortal = Convert.ToInt32(this.ddlUsuario.SelectedItem.Value),
                Estatus = this.DropDownListEstatus.SelectedItem.Text
            };

            this.Clean();
            var mensajeGuardado = this.GetGlobalResourceObject("strings", "GuardadoExitoso").ToString();
            this.altaUsuariosBussines.AddNewSingleUsuario(lousuario, AppSessionManager.Instance.Usuario);
            this.ShowMessage(mensajeGuardado, this.PreviousPage);
            
        }

        /// <summary>
        /// Limpia los controles de la pagina
        /// </summary>
        private void Clean()
        {
            this.ddlUsuario.SelectedIndex = -1;
            this.DropDownListEstatus.SelectedIndex = 1;
            this.SetInfoUsuario();
        }

        /// <summary>
        /// Coloca la informacion delusuario seleccionado
        /// </summary>
        private void SetInfoUsuario()
        {
            var infoUsuario = this.ddlUsuario.SelectedIndex == -1
                                  ?null
                                  : this.altaUsuariosBussines.GetUsuarioADByClave(
                                      Convert.ToInt32(this.ddlUsuario.SelectedValue));
            if (infoUsuario == null)
            {
                this.lblNombre.Text = string.Empty;
                this.lblAMaterno.Text = string.Empty;
                this.lblAPaterno.Text = string.Empty;
                this.lblArea.Text = string.Empty;
                this.lblSubarea.Text = string.Empty;
                this.lblDireccionCorreo.Text = string.Empty;
            }
            else
            {
                this.lblNombre.Text = infoUsuario.NombreUsuario;
                this.lblAMaterno.Text = infoUsuario.ApellidoMaterno;
                this.lblAPaterno.Text = infoUsuario.ApellidoPaterno;
                this.lblArea.Text = infoUsuario.Area;
                this.lblSubarea.Text = infoUsuario.SubArea;
                this.lblDireccionCorreo.Text = infoUsuario.DireccionCorreo;
            }
        }

        /// <summary>
        /// Evento del click en el boton de salor o regesar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect(this.PreviousPage);
        }

        /// <summary>
        /// muestra la informacion del usuario seleccionado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.SetInfoUsuario();
        }
    }
}